﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;
using Entities.Modelo;

namespace DataAccessLayer
{
    public class RepositorioEvento : ObjectEntity, ICadastro<Evento>
    {
        public RepositorioEvento()
            :base()
        {

        }

        public void InserirCadastro(Evento objeto)
        {
            tbEvento tbEvento = ComporObjetoEventoEntity(objeto);
            dataContext.AddTotbEvento(tbEvento);
            dataContext.SaveChanges();
        }

        public void AlterarCadastro(Evento objeto)
        {
            tbEvento tbEventoEditado = ComporObjetoEventoEntity(objeto);
            tbEvento tbEventoAtual = dataContext.tbEvento.Where(x => x.ID == objeto.ID).FirstOrDefault();
            dataContext.ApplyCurrentValues(tbEventoAtual.EntityKey.EntitySetName, tbEventoEditado);
            dataContext.SaveChanges();
        }

        public void ExcluirCadastro(Evento objeto)
        {
            tbEvento tbEventoEditado = ComporObjetoEventoEntity(objeto);
            tbEventoEditado.Ativo = false;
            tbEvento tbEventoAtual = dataContext.tbEvento.Where(x => x.ID == objeto.ID).FirstOrDefault();
            dataContext.ApplyCurrentValues(tbEventoAtual.EntityKey.EntitySetName, tbEventoEditado);
            dataContext.SaveChanges();
        }

        public Evento RetornarCadastro(int chave)
        {
            return (from c in dataContext.tbEvento
                    select new Evento
                    {
                        ID = c.ID,
                        ID_Computador = c.ID_Computador,
                        Data = c.Data,
                        Descricao = c.Descricao,
                        Ativo = c.Ativo,
                        TipoEvento = c.TipoEvento,
                        Custo = c.Custo

                    }).Where(evento => evento.Ativo == true).FirstOrDefault();
        }

        public IList<Evento> RetornarDados()
        {
            return (from c in dataContext.tbEvento
                    select new Evento
                    {
                        ID = c.ID,
                        ID_Computador = c.ID_Computador,
                        Data = c.Data,
                        Descricao = c.Descricao,
                        Ativo = c.Ativo,
                        TipoEvento = c.TipoEvento,
                        Custo = c.Custo

                    }).Where(evento => evento.Ativo == true).ToList();
        }

        private tbEvento ComporObjetoEventoEntity(Evento objeto)
        {
            tbEvento tbEventoEditado = new tbEvento();
            tbEventoEditado.ID = objeto.ID;
            tbEventoEditado.ID_Computador = objeto.ID_Computador;
            tbEventoEditado.Data = objeto.Data;
            tbEventoEditado.Descricao = objeto.Descricao;
            tbEventoEditado.Ativo = objeto.Ativo;
            tbEventoEditado.TipoEvento = objeto.TipoEvento;
            tbEventoEditado.Custo = objeto.Custo;
            return tbEventoEditado;
        }
    }
}
